/**
 * 
 */
package com.cqan.dao;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;

import com.cqan.orm.Page;
import com.cqan.orm.PropertyFilter;
import com.cqan.orm.PropertyFilter.MatchType;

/**
 * @Description TODO
 * @author slaton.wu@gmail.com
 * @date 2012-7-4下午1:42:56
 *
 */
public interface BaseDao<T, PK extends Serializable> {

	void saveEntity(T t);
	
	void update(T t);
	
	void delete(PK id);
	
	void delete(List<PK> ids);
	
	T get(PK id);
	
	Page<T> getAll(Page<T> page);
	
	List<T> getAll();
	
	List<T> find(List<PropertyFilter> filters);
	
	Page<T> findPage(Page<T> page, List<PropertyFilter> filters);
	
	Page<T> findPage(Page<T> page, PropertyFilter filter);
	
	List<T> findBy(final String propertyName, final Object value, final MatchType matchType);
	
	T findUniqueBy(String propertyName,Object value);

	List<T> get(Collection<PK> ids);
}
